package com.zliblike_platform.mapper;

import com.zliblike_platform.entity.BookRequest;
import com.zliblike_platform.vo.BookRequestVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 书籍请求Mapper接口
 */
@Mapper
public interface BookRequestMapper {
    
    /**
     * 插入书籍请求
     * @param request 书籍请求
     * @return 受影响的行数
     */
    int insert(BookRequest request);
    
    /**
     * 更新书籍请求状态
     * @param request 书籍请求
     * @return 受影响的行数
     */
    int updateStatus(BookRequest request);
    
    /**
     * 查询所有书籍请求（分页）
     * @param status 状态过滤
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 书籍请求列表
     */
    List<BookRequestVO> selectAllWithPagination(
            @Param("status") String status,
            @Param("offset") Integer offset, 
            @Param("limit") Integer limit);
    
    /**
     * 查询所有书籍请求总数
     * @param status 状态过滤
     * @return 总数
     */
    Integer countAll(@Param("status") String status);
    
    /**
     * 查询用户的书籍请求（分页）
     * @param userId 用户ID
     * @param status 状态过滤
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 书籍请求列表
     */
    List<BookRequestVO> selectByUserIdWithPagination(
            @Param("userId") Long userId,
            @Param("status") String status,
            @Param("offset") Integer offset, 
            @Param("limit") Integer limit);
    
    /**
     * 查询用户的书籍请求总数
     * @param userId 用户ID
     * @param status 状态过滤
     * @return 总数
     */
    Integer countByUserId(
            @Param("userId") Long userId,
            @Param("status") String status);
    
    /**
     * 根据ID查询书籍请求
     * @param requestId 请求ID
     * @return 书籍请求
     */
    BookRequestVO selectById(@Param("requestId") Long requestId);
    
    /**
     * 删除书籍请求
     * @param requestId 请求ID
     * @param userId 用户ID（确保只能删除自己的请求）
     * @return 受影响的行数
     */
    int deleteById(@Param("requestId") Long requestId, @Param("userId") Long userId);
    
    /**
     * 检查ISBN是否已存在于请求中
     * @param isbn ISBN
     * @return 是否存在
     */
    boolean existsByIsbn(@Param("isbn") String isbn);
} 